package org.insightech.er.editor.model.search;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SearchResult {

	public static final int SORT_TYPE_PATH = 1;

	public static final int SORT_TYPE_TYPE = 2;

	public static final int SORT_TYPE_NAME = 3;

	public static final int SORT_TYPE_VALUE = 4;

	private int sortType;

	private Object resultObject;

	private List<SearchResultRow> rows;

	public SearchResult(Object resultObject, List<SearchResultRow> rows) {
		this.resultObject = resultObject;
		this.rows = rows;
	}

	public Object getResultObject() {
		return resultObject;
	}

	public List<SearchResultRow> getRows() {
		return rows;
	}

	public void addRow(SearchResultRow row) {
		this.rows.add(row);
	}

	public void sort(int sortType) {
		this.sortType = sortType;

		Collections.sort(rows, new SearchResultRowComparator());
	}

	private class SearchResultRowComparator implements
			Comparator<SearchResultRow> {
		public int compare(SearchResultRow o1, SearchResultRow o2) {
			if (o1 == null) {
				return 1;
			}
			if (o2 == null) {
				return -1;
			}

			String value1 = null;
			String value2 = null;

			if (sortType == SORT_TYPE_PATH) {
				value1 = o1.getPath();
				value2 = o2.getPath();

			} else if (sortType == SORT_TYPE_TYPE || sortType == SORT_TYPE_NAME) {
				int type1 = o1.getType();
				int type2 = o2.getType();

				return type1 - type2;

			} else if (sortType == SORT_TYPE_VALUE) {
				value1 = o1.getText();
				value2 = o2.getText();
			}

			if (value1 == null) {
				return 1;
			}
			if (value2 == null) {
				return -1;
			}

			return value1.compareTo(value2);
		}

	}
}
